# coding: utf-8
# Define your item pipelines here
#
# Don't forget to add your pipeline to the ITEM_PIPELINES setting
# See: https://doc.scrapy.org/en/latest/topics/item-pipeline.html
import pymysql
from pachong.settings import MYSQL_DBNAME,MYSQL_HOST,MYSQL_PASSWD,MYSQL_USER
import datetime
import logging
import sys
sys.getdefaultencoding()
logger = logging.getLogger(__name__)
'''
管道
  可创建多个-需要在settings中开启这些管道
  为什么需要多个pipelines:
    1.不同的pipelines处理不同的item的内容
    2.一个spider的内容可能要做不同的操作，比如存入不同的数据库中
  注意：
    1.pipeline的权重越小优先级越高
    2.pipeline中的process_ltem方法名不能修改为其他的名称
'''

class PachongPipeline(object):
    def __init__(self):
        # 连接数据库
        self.connect = pymysql.connect(
            host=MYSQL_HOST,
            db=MYSQL_DBNAME,
            user=MYSQL_USER,
            passwd=MYSQL_PASSWD,
            charset='utf8',
            use_unicode=True)
        # 通过cursor执行增删查改
        self.cursor = self.connect.cursor();
        print("已成功连接数据库！")

    def process_item(self, item, spider):
        print("爬虫名：",spider.name)
        logger.warning(spider.name)
        logger.warning(item)
        # 使用execute方法执行SQL语句
        self.cursor.execute("select title from py_data where title = %s",item['title'])
        # 使用 fetchone() 方法获取一条数据
        data = self.cursor.fetchone()
        logger.warning("数据库中存在的此数据情况： %s" % data)
        if data == None :
            nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 当前时间
            self.cursor.execute(
                 """insert into py_data(title,title_url,title_date,create_date,create_name)
                values (%s, %s, %s,%s,%s)""",
                (item['title'],
                item['title_url'],
                item['title_date'],nowTime,item['come_from']))
                # 提交sql语句
            self.connect.commit()
            print("数据已成功写入！")
            logger.warning("数据已成功写入！")
        else:
            logger.warning("已存在该条数据，无需写入，执行下一条记录")
        return item
